#!/bin/bash ### encode_e-mail_mkv-to-mp4_265_a-swap.sh sender="default user" email=email@domain usrName=user1 filetype=mp4 outfile=mp4 jobfile=/root/job-details.txt jobfolder=/home/$usrName/Videos/encode/ jobOut=$jobfolder\Out/ jobDone=$jobfolder\Done/ jobWork=$jobfolder\Processes/ jobfile=$jobWork\job-details.txt constantquality=24 #videobitrate=899 #audiobitrate=192 vstream=0 astream=0 ### yuv420p for regular yuv420p10le for 10bit "That happens to be the native endianness on my machine. Run ffmpeg -h encoder=libx265 to see yours." pix_fmt=yuv420p10le ### speed 0-5 0="slowest best quality" 5="fastest worst uality" speed=5 ### deadline "realtime"=fastest/worst_qualiy "good" "best"=slowest/best_quality deadline=best titlemod=[v${videobitrate}_a${audiobitrate}] d=[CRF"$constantquality"_${pix_fmt}] t=[CRF"$constantquality"_${pix_fmt}] if sudo [ -d $jobWork ] ; then echo "FOUND $jobWork" ; else echo "DID NOT FIND $jobWork" && sudo mkdir $jobWork && sudo chown $usrName $jobWork && sudo chgrp $usrName $jobWork; fi if sudo [ -d $jobOut ] ; then echo "FOUND $jobOut" ; else echo "DID NOT FIND $jobOut" && sudo mkdir $jobOut && sudo chown $usrName $jobOut && sudo chgrp $usrName $jobOut; fi if sudo [ -d $jobDone ] ; then echo "FOUND $jobDone" ; else echo "DID NOT FIND $jobDone" && sudo mkdir $jobDone && sudo chown $usrName $jobDone && sudo chgrp $usrName $jobDone; fi if sudo [ -f $jobfile ] ; then echo "FOUND $jobfile" ; else echo "DID NOT FIND $jobfile" && sudo touch $jobfile && sudo chown $usrName $jobfile && sudo chgrp $usrName $jobfile; fi cd $jobWork currenttime=$(date +"%Y-%m-%d %H:%M") ### DOUBLE QUOTES REQUIRED FOR ECHO STRINGS #echo "START $currenttime" | sudo cat >> $jobfile echo "START $currenttime"$'\n'"$(cat $jobfile)" > $jobfile for file in $jobfolder*.$filetype do filename="${file##*/}" filename="${filename%.*}" #echo $filename currenttime=$(date +"%Y-%m-%d %H:%M") ### DOUBLE QUOTES REQUIRED FOR ECHO STRINGS #echo "$currenttime $filename Start" | sudo cat >> $jobfile echo "Start $currenttime $filename"$'\n'"$(cat $jobfile)" > $jobfile pwd ls mail -r ${sender} -s "Job Status $currenttime" $email < $jobfile sleep 5 #ffmpeg -y -i "$file" -map 0:s:0 ${jobWork}/subtitles.ass ffmpeg -y -i "$file" -map 0:v:$vstream -map 0:a:$astream -threads 4 -c:v libaom-av1 -preset veryslow -crf $constantquality -c:a aac -metadata:s:v:0 title="$file $t" -metadata title="$file $t" -disposition:a:1 0 -disposition:a:0 default -pix_fmt ${pix_fmt} -x265-params profile=main10 "$jobOut${filename}_${d}.${outfile}" sudo chgrp $usrName "$jobOut$filename $d.${outfile}" && sudo chown $usrName "$jobOut${filename}_${d}.${outfile}" mv "$file" "$jobDone" && sudo chown $usrName "$jobDone$filename.$filetype" && sudo chgrp $usrName "$jobDone$filename.$filetype" currenttime=$(date +"%Y-%m-%d %H:%M") ### DOUBLE QUOTES REQUIRED FOR ECHO STRINGS #echo "$currenttime $filename Stop" | sudo cat >> $jobfile echo "Stop $currenttime $filename"$'\n'"$(cat $jobfile)" > $jobfile mail -r ${sender} -s "Job Status $currenttime" $email < $jobfile sleep 5 rm ffmpeg2pass-0.log done currenttime=$(date +"%Y-%m-%d %H:%M") ### DOUBLE QUOTES REQUIRED FOR ECHO STRINGS #echo "STOP $currenttime" | sudo cat >> $jobfile echo "STOP $currenttime"$'\n'"$(cat $jobfile)" > $jobfile mail -r ${sender} -s "Job Complete $currenttime " $email < $jobfile sleep 5 sudo rm $jobfile #sudo rm ${jobWork}/subtitles.ass currenttime=$(date +"%Y-%m-%d %H:%M") if sudo [ -f ./nohup.out ] ; then mv "./nohup.out" "./nohup_$currenttime.out" && echo "changed nohup.out" ; else echo "DID NOT FIND nohup.out" ; fi